/*
 管理连接db客户端,抽象成，兼容mysql， mongodb
*/

#pragma once
#include "base_include.h"

using QueryResultRowCb = std::function<void(const proto::BaseTable &data)>;
class InnerSvrCon;
class IDbCon
{
public:
	virtual ~IDbCon() {};

	virtual bool ConnectDb(const DbCfg &cfg) { return false; };

	virtual bool InitTable() { return false; }; //创建表， 检查表是否非法
	virtual bool Insert(const proto::BaseTable &req) { return false; };
	virtual bool Update(const proto::BaseTable &req) { return false; };
	//@cb 找到n个数据，回调n次
	virtual bool Query(const proto::BaseTable &req, uint32_t limitNum, QueryResultRowCb cb) { return false; };
	virtual bool Query(uint16_t table_id, const std::string &cond, uint32_t limitNum, QueryResultRowCb cb) { return false; };
	//查询部分字段
	//@vecFieldName 指定查询的字段名
	virtual bool Query(uint16_t table_id, const std::string& cond, const std::vector<std::string> &vecFieldName, QueryResultRowCb cb) { return false; };
	virtual bool Del(uint16_t table_id, const std::string& cond) { return false; };
	virtual bool ExecuteSql(const std::string &req) { return false; };

};

//管理连接db客户端
class DbConMgr : public Singleton<DbConMgr>
{

public:
	bool Init(const DbCfg &cfg);

	IDbCon &GetCon();

private:
	IDbCon *m_con=nullptr;
};


